class Solution
{
public:
    int countTriplets(vector<int> &nums)
    {
        unordered_map<int, int> cnt;
        int n = nums.size();
        for (int i = 0; i < n; i ++ )
            for (int j = 0; j < n; j ++ )
                cnt[nums[i] & nums[j]] ++ ;//存下前两个数字&操作后的结果

        int res = 0;
        for (int i = 0; i < n; i ++ )//枚举第三个数
            for (int j = 0; j < 1 << 16; j ++ )//枚举刚才前两个数&后的所有可能结果
                if (!(j & nums[i]))
                    res += cnt[j];
        return res;
    }
};

//i j k 不相互影响
//枚举两维,并将其存下来,再枚举前两种&起来后的结果和第三个数字枚举
//hash记录个数